package br.com.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.beans.Estado;
import br.com.beans.Pais;

/**
 * Classe de manipulacao de objetos persistidos via JPA
 * Objetos da classe bean Estado
 */
public class EstadoDAO extends GenericDAO<Estado> {

	/** Lista estados pelo pais
	 * @param pais Pais
	 * @return Lista de estados
	 */
	@SuppressWarnings("unchecked")
	public List<Estado> listarPorPais(Pais pais) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		List<Estado> list = null;

		try {

			t.begin();
			Query q = em.createQuery("from Estado where pais = :pais");
			q.setParameter("pais", pais);
			list = (List<Estado>) q.getResultList();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return list;
	}

	/** Localiza estado pelo nome
	 * @param nome Nome do estado
	 * @return objeto persistido
	 */
	public Estado localizar(String nome) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		Estado estado = null;
		
		try {

			t.begin();
			Query q = em.createQuery("from Estado where nome like :nome");
			q.setParameter("nome", nome);
			estado = (Estado) q.getSingleResult();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return estado;
	}
	
}
